home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1997 April / macformat-049.iso / mac / Shareware Plus / Developers / dropg++ / usr / include / netinet / in.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-02-20  |  7.9 KB  |  239 lines  |  [TEXT/R*ch]

  1. /*
  2.  * Copyright (c) 1982, 1986, 1990, 1993
  3.  *    The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *    @(#)in.h    8.3 (Berkeley) 1/3/94
  34.  */
  35.  
  36. /*
  37.  * Constants and structures defined by the internet system,
  38.  * Per RFC 790, September 1981, and numerous additions.
  39.  */
  40.  
  41. /*
  42.  * Protocols
  43.  */
  44. #define    IPPROTO_IP        0        /* dummy for IP */
  45. #define    IPPROTO_ICMP        1        /* control message protocol */
  46. #define    IPPROTO_IGMP        2        /* group mgmt protocol */
  47. #define    IPPROTO_GGP        3        /* gateway^2 (deprecated) */
  48. #define    IPPROTO_TCP        6        /* tcp */
  49. #define    IPPROTO_EGP        8        /* exterior gateway protocol */
  50. #define    IPPROTO_PUP        12        /* pup */
  51. #define    IPPROTO_UDP        17        /* user datagram protocol */
  52. #define    IPPROTO_IDP        22        /* xns idp */
  53. #define    IPPROTO_TP        29         /* tp-4 w/ class negotiation */
  54. #define    IPPROTO_EON        80        /* ISO cnlp */
  55. #define    IPPROTO_ENCAP        98        /* encapsulation header */
  56.  
  57. #define    IPPROTO_RAW        255        /* raw IP packet */
  58. #define    IPPROTO_MAX        256
  59.  
  60.  
  61. /*
  62.  * Local port number conventions:
  63.  * Ports < IPPORT_RESERVED are reserved for
  64.  * privileged processes (e.g. root).
  65.  * Ports > IPPORT_USERRESERVED are reserved
  66.  * for servers, not necessarily privileged.
  67.  */
  68. #define    IPPORT_RESERVED        1024
  69. #define    IPPORT_USERRESERVED    5000
  70.  
  71. /*
  72.  * Internet address (a structure for historical reasons)
  73.  */
  74. struct in_addr {
  75.     u_long s_addr;
  76. };
  77.  
  78. /*
  79.  * Definitions of bits in internet address integers.
  80.  * On subnets, the decomposition of addresses to host and net parts
  81.  * is done according to subnet mask, not the masks here.
  82.  */
  83. #define    IN_CLASSA(i)        (((long)(i) & 0x80000000) == 0)
  84. #define    IN_CLASSA_NET        0xff000000
  85. #define    IN_CLASSA_NSHIFT    24
  86. #define    IN_CLASSA_HOST        0x00ffffff
  87. #define    IN_CLASSA_MAX        128
  88.  
  89. #define    IN_CLASSB(i)        (((long)(i) & 0xc0000000) == 0x80000000)
  90. #define    IN_CLASSB_NET        0xffff0000
  91. #define    IN_CLASSB_NSHIFT    16
  92. #define    IN_CLASSB_HOST        0x0000ffff
  93. #define    IN_CLASSB_MAX        65536
  94.  
  95. #define    IN_CLASSC(i)        (((long)(i) & 0xe0000000) == 0xc0000000)
  96. #define    IN_CLASSC_NET        0xffffff00
  97. #define    IN_CLASSC_NSHIFT    8
  98. #define    IN_CLASSC_HOST        0x000000ff
  99.  
  100. #define    IN_CLASSD(i)        (((long)(i) & 0xf0000000) == 0xe0000000)
  101. #define    IN_CLASSD_NET        0xf0000000    /* These ones aren't really */
  102. #define    IN_CLASSD_NSHIFT    28        /* net and host fields, but */
  103. #define    IN_CLASSD_HOST        0x0fffffff    /* routing needn't know.    */
  104. #define    IN_MULTICAST(i)        IN_CLASSD(i)
  105.  
  106. #define    IN_EXPERIMENTAL(i)    (((long)(i) & 0xf0000000) == 0xf0000000)
  107. #define    IN_BADCLASS(i)        (((long)(i) & 0xf0000000) == 0xf0000000)
  108.  
  109. #define    INADDR_ANY        (u_long)0x00000000
  110. #define    INADDR_BROADCAST    (u_long)0xffffffff    /* must be masked */
  111. #ifndef KERNEL
  112. #define    INADDR_NONE        0xffffffff        /* -1 return */
  113. #endif
  114.  
  115. #define    INADDR_UNSPEC_GROUP    (u_long)0xe0000000    /* 224.0.0.0 */
  116. #define    INADDR_ALLHOSTS_GROUP    (u_long)0xe0000001    /* 224.0.0.1 */
  117. #define    INADDR_MAX_LOCAL_GROUP    (u_long)0xe00000ff    /* 224.0.0.255 */
  118.  
  119. #define    IN_LOOPBACKNET        127            /* official! */
  120.  
  121. /*
  122.  * Socket address, internet style.
  123.  */
  124. struct sockaddr_in {
  125.     u_char    sin_len;
  126.     u_char    sin_family;
  127.     u_short    sin_port;
  128.     struct    in_addr sin_addr;
  129.     char    sin_zero[8];
  130. };
  131.  
  132. /*
  133.  * Structure used to describe IP options.
  134.  * Used to store options internally, to pass them to a process,
  135.  * or to restore options retrieved earlier.
  136.  * The ip_dst is used for the first-hop gateway when using a source route
  137.  * (this gets put into the header proper).
  138.  */
  139. struct ip_opts {
  140.     struct    in_addr ip_dst;        /* first hop, 0 w/o src rt */
  141.     char    ip_opts[40];        /* actually variable in size */
  142. };
  143.  
  144. /*
  145.  * Options for use with [gs]etsockopt at the IP level.
  146.  * First word of comment is data type; bool is stored in int.
  147.  */
  148. #define    IP_OPTIONS        1    /* buf/ip_opts; set/get IP options */
  149. #define    IP_HDRINCL        2    /* int; header is included with data */
  150. #define    IP_TOS            3    /* int; IP type of service and preced. */
  151. #define    IP_TTL            4    /* int; IP time to live */
  152. #define    IP_RECVOPTS        5    /* bool; receive all IP opts w/dgram */
  153. #define    IP_RECVRETOPTS        6    /* bool; receive IP opts for response */
  154. #define    IP_RECVDSTADDR        7    /* bool; receive IP dst addr w/dgram */
  155. #define    IP_RETOPTS        8    /* ip_opts; set/get IP options */
  156. #define    IP_MULTICAST_IF        9    /* u_char; set/get IP multicast i/f  */
  157. #define    IP_MULTICAST_TTL    10   /* u_char; set/get IP multicast ttl */
  158. #define    IP_MULTICAST_LOOP    11   /* u_char; set/get IP multicast loopback */
  159. #define    IP_ADD_MEMBERSHIP    12   /* ip_mreq; add an IP group membership */
  160. #define    IP_DROP_MEMBERSHIP    13   /* ip_mreq; drop an IP group membership */
  161.  
  162. /*
  163.  * Defaults and limits for options
  164.  */
  165. #define    IP_DEFAULT_MULTICAST_TTL  1    /* normally limit m'casts to 1 hop  */
  166. #define    IP_DEFAULT_MULTICAST_LOOP 1    /* normally hear sends if a member  */
  167. #define    IP_MAX_MEMBERSHIPS    20    /* per socket; must fit in one mbuf */
  168.  
  169. /*
  170.  * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
  171.  */
  172. struct ip_mreq {
  173.     struct    in_addr imr_multiaddr;    /* IP multicast address of group */
  174.     struct    in_addr imr_interface;    /* local IP address of interface */
  175. };
  176.  
  177. /*
  178.  * Definitions for inet sysctl operations.
  179.  *
  180.  * Third level is protocol number.
  181.  * Fourth level is desired variable within that protocol.
  182.  */
  183. #define    IPPROTO_MAXID    (IPPROTO_IDP + 1)    /* don't list to IPPROTO_MAX */
  184.  
  185. #define    CTL_IPPROTO_NAMES { \
  186.     { "ip", CTLTYPE_NODE }, \
  187.     { "icmp", CTLTYPE_NODE }, \
  188.     { "igmp", CTLTYPE_NODE }, \
  189.     { "ggp", CTLTYPE_NODE }, \
  190.     { 0, 0 }, \
  191.     { 0, 0 }, \
  192.     { "tcp", CTLTYPE_NODE }, \
  193.     { 0, 0 }, \
  194.     { "egp", CTLTYPE_NODE }, \
  195.     { 0, 0 }, \
  196.     { 0, 0 }, \
  197.     { 0, 0 }, \
  198.     { "pup", CTLTYPE_NODE }, \
  199.     { 0, 0 }, \
  200.     { 0, 0 }, \
  201.     { 0, 0 }, \
  202.     { 0, 0 }, \
  203.     { "udp", CTLTYPE_NODE }, \
  204.     { 0, 0 }, \
  205.     { 0, 0 }, \
  206.     { 0, 0 }, \
  207.     { 0, 0 }, \
  208.     { "idp", CTLTYPE_NODE }, \
  209. }
  210.  
  211. /*
  212.  * Names for IP sysctl objects
  213.  */
  214. #define    IPCTL_FORWARDING    1    /* act as router */
  215. #define    IPCTL_SENDREDIRECTS    2    /* may send redirects when forwarding */
  216. #define    IPCTL_DEFTTL        3    /* default TTL */
  217. #ifdef notyet
  218. #define    IPCTL_DEFMTU        4    /* default MTU */
  219. #endif
  220. #define    IPCTL_MAXID        5
  221.  
  222. #define    IPCTL_NAMES { \
  223.     { 0, 0 }, \
  224.     { "forwarding", CTLTYPE_INT }, \
  225.     { "redirect", CTLTYPE_INT }, \
  226.     { "ttl", CTLTYPE_INT }, \
  227.     { "mtu", CTLTYPE_INT }, \
  228. }
  229.  
  230.  
  231. #ifdef KERNEL
  232. int     in_broadcast __P((struct in_addr, struct ifnet *));
  233. int     in_canforward __P((struct in_addr));
  234. int     in_cksum __P((struct mbuf *, int));
  235. int     in_localaddr __P((struct in_addr));
  236. u_long     in_netof __P((struct in_addr));
  237. void     in_socktrim __P((struct sockaddr_in *));
  238. #endif
  239.